﻿using System;
using Outlook = Microsoft.Office.Interop.Outlook;
using Microsoft.Office.Interop.Outlook;
using System.Runtime.InteropServices;

namespace OutlookMessageWrapper
{
    /// <summary>
    /// Wrapper class for Outlook Contact item
    /// </summary>
    class OutlookContactItem : OutlookMessageItemWrapper
    {
        public Outlook.ContactItem Item { get; set; }

        public OutlookContactItem(Outlook.ContactItem olContact)
        {
            Item = olContact;

            RegisterEvents();
        }

        /// <summary>
        /// Registers all outlook item events
        /// </summary>
        private void RegisterEvents()
        {
            Item.AfterWrite += new ItemEvents_10_AfterWriteEventHandler(Item_AfterWrite);
            Item.AttachmentAdd += new ItemEvents_10_AttachmentAddEventHandler(Item_AttachmentAdd);
            Item.AttachmentRead += new ItemEvents_10_AttachmentReadEventHandler(Item_AttachmentRead);
            Item.AttachmentRemove += new ItemEvents_10_AttachmentRemoveEventHandler(Item_AttachmentRemove);
            Item.BeforeAttachmentAdd += new ItemEvents_10_BeforeAttachmentAddEventHandler(Item_BeforeAttachmentAdd);
            Item.BeforeAttachmentPreview += new ItemEvents_10_BeforeAttachmentPreviewEventHandler(Item_BeforeAttachmentPreview);
            Item.BeforeAttachmentRead += new ItemEvents_10_BeforeAttachmentReadEventHandler(Item_BeforeAttachmentRead);
            Item.BeforeAttachmentSave += new ItemEvents_10_BeforeAttachmentSaveEventHandler(Item_BeforeAttachmentSave);
            Item.BeforeAttachmentWriteToTempFile += new ItemEvents_10_BeforeAttachmentWriteToTempFileEventHandler(Item_BeforeAttachmentWriteToTempFile);
            Item.BeforeAutoSave += new ItemEvents_10_BeforeAutoSaveEventHandler(Item_BeforeAutoSave);
            Item.BeforeCheckNames += new ItemEvents_10_BeforeCheckNamesEventHandler(Item_BeforeCheckNames);
            Item.BeforeDelete += new ItemEvents_10_BeforeDeleteEventHandler(Item_BeforeDelete);
            Item.BeforeRead += new ItemEvents_10_BeforeReadEventHandler(Item_BeforeRead);
            Item.CustomAction += new ItemEvents_10_CustomActionEventHandler(Item_CustomAction);
            Item.CustomPropertyChange += new ItemEvents_10_CustomPropertyChangeEventHandler(Item_CustomPropertyChange);
            Item.Open += new ItemEvents_10_OpenEventHandler(Item_Open);
            Item.PropertyChange += new ItemEvents_10_PropertyChangeEventHandler(Item_PropertyChange);
            Item.Read += new ItemEvents_10_ReadEventHandler(Item_Read);
            Item.Unload += new ItemEvents_10_UnloadEventHandler(Item_Unload);
            Item.Write += new ItemEvents_10_WriteEventHandler(Item_Write);
            Item.Forward += new ItemEvents_10_ForwardEventHandler(Item_Forward);
            Item.Reply += new ItemEvents_10_ReplyEventHandler(Item_Reply);
            Item.ReplyAll += new ItemEvents_10_ReplyAllEventHandler(Item_ReplyAll);
        }

        /// <summary>
        /// Un-registers all outlook item events
        /// </summary>
        private void UnRegisterEvents()
        {
            Item.AfterWrite -= new ItemEvents_10_AfterWriteEventHandler(Item_AfterWrite);
            Item.AttachmentAdd -= new ItemEvents_10_AttachmentAddEventHandler(Item_AttachmentAdd);
            Item.AttachmentRead -= new ItemEvents_10_AttachmentReadEventHandler(Item_AttachmentRead);
            Item.AttachmentRemove -= new ItemEvents_10_AttachmentRemoveEventHandler(Item_AttachmentRemove);
            Item.BeforeAttachmentAdd -= new ItemEvents_10_BeforeAttachmentAddEventHandler(Item_BeforeAttachmentAdd);
            Item.BeforeAttachmentPreview -= new ItemEvents_10_BeforeAttachmentPreviewEventHandler(Item_BeforeAttachmentPreview);
            Item.BeforeAttachmentRead -= new ItemEvents_10_BeforeAttachmentReadEventHandler(Item_BeforeAttachmentRead);
            Item.BeforeAttachmentSave -= new ItemEvents_10_BeforeAttachmentSaveEventHandler(Item_BeforeAttachmentSave);
            Item.BeforeAttachmentWriteToTempFile -= new ItemEvents_10_BeforeAttachmentWriteToTempFileEventHandler(Item_BeforeAttachmentWriteToTempFile);
            Item.BeforeAutoSave -= new ItemEvents_10_BeforeAutoSaveEventHandler(Item_BeforeAutoSave);
            Item.BeforeCheckNames -= new ItemEvents_10_BeforeCheckNamesEventHandler(Item_BeforeCheckNames);
            Item.BeforeDelete -= new ItemEvents_10_BeforeDeleteEventHandler(Item_BeforeDelete);
            Item.BeforeRead -= new ItemEvents_10_BeforeReadEventHandler(Item_BeforeRead);
            Item.CustomAction -= new ItemEvents_10_CustomActionEventHandler(Item_CustomAction);
            Item.CustomPropertyChange -= new ItemEvents_10_CustomPropertyChangeEventHandler(Item_CustomPropertyChange);
            Item.Open -= new ItemEvents_10_OpenEventHandler(Item_Open);
            Item.PropertyChange -= new ItemEvents_10_PropertyChangeEventHandler(Item_PropertyChange);
            Item.Read -= new ItemEvents_10_ReadEventHandler(Item_Read);
            Item.Unload -= new ItemEvents_10_UnloadEventHandler(Item_Unload);
            Item.Write -= new ItemEvents_10_WriteEventHandler(Item_Write);
            Item.Forward -= new ItemEvents_10_ForwardEventHandler(Item_Forward);
            Item.Reply -= new ItemEvents_10_ReplyEventHandler(Item_Reply);
            Item.ReplyAll -= new ItemEvents_10_ReplyAllEventHandler(Item_ReplyAll);
        }

        void Item_ReplyAll(object Response, ref bool Cancel)
        {
            if (ReplyAllItem != null)
            {
                ReplyAllItem(Response, ref Cancel);
            }
        }

        void Item_Reply(object Response, ref bool Cancel)
        {
            if (ReplyItem != null)
            {
                ReplyItem(Response, ref Cancel);
            }
        }

        void Item_Forward(object Forward, ref bool Cancel)
        {
            if (ForwardItem != null)
            {
                ForwardItem(Forward, ref Cancel);
            }
        }

        void Item_Write(ref bool Cancel)
        {
            if (Write != null)
            {
                Write(ref Cancel);
            }
        }

        void Item_Unload()
        {
            if (Unload != null)
            {
                Unload();
            }
        }

        void Item_Read()
        {
            if (Read != null)
            {
                Read();
            }
        }

        void Item_PropertyChange(string Name)
        {
            if (PropertyChange != null)
            {
                PropertyChange(Name);
            }
        }

        void Item_Open(ref bool Cancel)
        {
            if (Open != null)
            {
                Open(ref Cancel);
            }
        }

        void Item_CustomPropertyChange(string Name)
        {
            if (CustomPropertyChange != null)
            {
                CustomPropertyChange(Name);
            }
        }

        void Item_CustomAction(object Action, object Response, ref bool Cancel)
        {
            if (CustomAction != null)
            {
                CustomAction(Action, Response, ref Cancel);
            }
        }

        void Item_BeforeRead()
        {
            if (BeforeRead != null)
            {
                BeforeRead();
            }
        }

        void Item_BeforeDelete(object Item, ref bool Cancel)
        {
            if (BeforeDelete != null)
            {
                BeforeDelete(Item, ref Cancel);
            }
        }

        void Item_BeforeCheckNames(ref bool Cancel)
        {
            if (BeforeCheckNames != null)
            {
                BeforeCheckNames(ref Cancel);
            }
        }

        void Item_BeforeAutoSave(ref bool Cancel)
        {
            if (BeforeAutoSave != null)
            {
                BeforeAutoSave(ref Cancel);
            }
        }

        void Item_BeforeAttachmentWriteToTempFile(Attachment Attachment, ref bool Cancel)
        {
            if (BeforeAttachmentWriteToTempFile != null)
            {
                BeforeAttachmentWriteToTempFile(Attachment, ref Cancel);
            }
        }

        void Item_BeforeAttachmentSave(Attachment Attachment, ref bool Cancel)
        {
            if (BeforeAttachmentSave != null)
            {
                BeforeAttachmentSave(Attachment, ref Cancel);
            }
        }

        void Item_BeforeAttachmentRead(Attachment Attachment, ref bool Cancel)
        {
            if (BeforeAttachmentRead != null)
            {
                BeforeAttachmentRead(Attachment, ref Cancel);
            }
        }

        void Item_BeforeAttachmentPreview(Attachment Attachment, ref bool Cancel)
        {
            if (BeforeAttachmentPreview != null)
            {
                BeforeAttachmentPreview(Attachment, ref Cancel);
            }
        }

        void Item_BeforeAttachmentAdd(Attachment Attachment, ref bool Cancel)
        {
            if (BeforeAttachmentAdd != null)
            {
                BeforeAttachmentAdd(Attachment, ref Cancel);
            }
        }

        void Item_AttachmentRemove(Attachment Attachment)
        {
            if (AttachmentRemove != null)
            {
                AttachmentRemove(Attachment);
            }
        }

        void Item_AttachmentRead(Attachment Attachment)
        {
            if (AttachmentRead != null)
            {
                AttachmentRead(Attachment);
            }
        }

        void Item_AttachmentAdd(Attachment Attachment)
        {
            if (AttachmentAdd != null)
            {
                AttachmentAdd(Attachment);
            }
        }

        void Item_AfterWrite()
        {
            if (AfterWrite != null)
            {
                AfterWrite();
            }
        }

        public override string Subject
        {
            get { return Item.Subject; }
            set { Item.Subject = value; }
        }

        public override string EntryID
        {
            get
            {
                return Item.EntryID;
            }
        }

        public override string MessageClass
        {
            get
            {
                return Item.MessageClass;
            }
            set
            {
                Item.MessageClass = value;
            }
        }

        public override string OutlookVersion
        {
            get
            {
                return Item.OutlookVersion;
            }
        }

        public override string Body
        {
            get
            {
                return Item.Body;
            }
            set
            {
                Item.Body = value;
            }
        }

        public override int Size
        {
            get
            {

                return Item.Size;
            }
        }

        public override DateTime CreationTime
        {
            get { return Item.CreationTime; }
        }

        public override DateTime LastModificationTime
        {
            get { return Item.LastModificationTime; }
        }

        public override Application Application
        {
            get { return Item.Application; }
        }

        #region override function & properties

        ///<summary>
        ///     Returns or sets a String (string in C#) representing the account for the
        ///     contact. Read/write.
        ///</summary>
        public override string Account { get { return Item.Account; } set { Item.Account = value; } }
       
        ///<summary>
        ///     Returns an Microsoft.Office.Interop.Outlook.Actions collection that represents
        ///     all the available actions for the item. Read-only.
        ///</summary>
        public override Actions Actions { get { return Item.Actions; } }
        
        ///<summary>
        ///     Returns or sets a DateTime indicating the anniversary date for the contact.
        ///     Read/write.
        ///</summary>
        public override DateTime Anniversary { get { return Item.Anniversary; } set { Item.Anniversary = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the name of the person
        ///     who is the assistant for the contact. Read/write.
        ///</summary>
        public override string AssistantName { get { return Item.AssistantName; } set { Item.AssistantName = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the telephone number
        ///     of the person who is the assistant for the contact. Read/write.
        ///</summary>
        public override string AssistantTelephoneNumber { get { return Item.AssistantTelephoneNumber; } set { Item.AssistantTelephoneNumber = value; } }
        
        ///<summary>
        ///     Returns an Microsoft.Office.Interop.Outlook.Attachments object that represents
        ///     all the attachments for the specified item. Read-only.
        ///</summary>
        public override Attachments Attachments { get { return Item.Attachments; } }
        
        ///<summary>
        ///     Returns a Boolean (bool in C#) that determines if the item is a winner of
        ///     an automatic conflict resolution. Read-only.
        ///</summary>
        public override bool AutoResolvedWinner { get { return Item.AutoResolvedWinner; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the billing information
        ///     associated with the Outlook item. Read/write.
        ///</summary>
        public override string BillingInformation { get { return Item.BillingInformation; } set { Item.BillingInformation = value; } }
        
        ///<summary>
        ///     Returns or sets a DateTime indicating the birthday for the contact. Read/write.
        ///</summary>
        public override DateTime Birthday { get { return Item.Birthday; } set { Item.Birthday = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the second business
        ///     telephone number for the contact. Read/write.
        ///</summary>
        public override string Business2TelephoneNumber { get { return Item.Business2TelephoneNumber; } set { Item.Business2TelephoneNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the whole, unparsed
        ///     business address for the contact. Read/write.
        ///</summary>
        public override string BusinessAddress { get { return Item.BusinessAddress; } set { Item.BusinessAddress = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the city name portion
        ///     of the business address for the contact. Read/write.
        ///</summary>
        public override string BusinessAddressCity { get { return Item.BusinessAddressCity; } set { Item.BusinessAddressCity = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the country/region code
        ///     portion of the business address for the contact. Read/write.
        ///</summary>
        public override string BusinessAddressCountry { get { return Item.BusinessAddressCountry; } set { Item.BusinessAddressCountry = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the postal code (zip
        ///     code) portion of the business address for the contact. Read/write.
        ///</summary>
        public override string BusinessAddressPostalCode { get { return Item.BusinessAddressPostalCode; } set { Item.BusinessAddressPostalCode = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the post office box
        ///     number portion of the business address for the contact. Read/write.
        ///</summary>
        public override string BusinessAddressPostOfficeBox { get { return Item.BusinessAddressPostOfficeBox; } set { Item.BusinessAddressPostOfficeBox = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the state code portion
        ///     of the business address for the contact. Read/write.
        ///</summary>
        public override string BusinessAddressState { get { return Item.BusinessAddressState; } set { Item.BusinessAddressState = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the street address portion
        ///     of the business address for the contact. Read/write.
        ///</summary>
        public override string BusinessAddressStreet { get { return Item.BusinessAddressStreet; } set { Item.BusinessAddressStreet = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) that represents the XML markup for
        ///     the layout of the Electronic Business Card. Read/write.
        ///</summary>
        public override string BusinessCardLayoutXml { get { return Item.BusinessCardLayoutXml; } set { Item.BusinessCardLayoutXml = value; } }
        
        ///<summary>
        ///     Returns an Microsoft.Office.Interop.Outlook.OlBusinessCardType constant that
        ///     specifies the type of Electronic Business Card used by this contact. Read-only.
        ///</summary>
        public override OlBusinessCardType BusinessCardType { get { return Item.BusinessCardType; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the business fax number
        ///     for the contact. Read/write.
        ///</summary>
        public override string BusinessFaxNumber { get { return Item.BusinessFaxNumber; } set { Item.BusinessFaxNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the URL of the business
        ///     Web page for the contact. Read/write.
        ///</summary>
        public override string BusinessHomePage { get { return Item.BusinessHomePage; } set { Item.BusinessHomePage = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the first business telephone
        ///     number for the contact. Read/write.
        ///</summary>
        public override string BusinessTelephoneNumber { get { return Item.BusinessTelephoneNumber; } set { Item.BusinessTelephoneNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the callback telephone
        ///     number for the contact. Read/write.
        ///</summary>
        public override string CallbackTelephoneNumber { get { return Item.CallbackTelephoneNumber; } set { Item.CallbackTelephoneNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the car telephone number
        ///     for the contact. Read/write.
        ///</summary>
        public override string CarTelephoneNumber { get { return Item.CarTelephoneNumber; } set { Item.CarTelephoneNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the categories assigned
        ///     to the Outlook item. Read/write.
        ///</summary>
        public override string Categories { get { return Item.Categories; } set { Item.Categories = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the names of the children
        ///     of the contact. Read/write.
        ///</summary>
        public override string Children { get { return Item.Children; } set { Item.Children = value; } }
        
        ///<summary>
        ///     Returns an Microsoft.Office.Interop.Outlook.OlObjectClass constant indicating
        ///     the object's class. Read-only.
        ///</summary>
        public override OlObjectClass Class { get { return Item.Class; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the names of the companies
        ///     associated with the Outlook item. Read/write.
        ///</summary>
        public override string Companies { get { return Item.Companies; } set { Item.Companies = value; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the concatenated company name
        ///     and full name for the contact. Read-only.
        ///</summary>
        public override string CompanyAndFullName { get { return Item.CompanyAndFullName; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the company name for the contact
        ///     followed by the concatenated last name, first name, and middle name with
        ///     no space between the last and first names. Read-only.
        ///</summary>
        public override string CompanyLastFirstNoSpace { get { return Item.CompanyLastFirstNoSpace; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the company name for the contact
        ///     followed by the concatenated last name, first name, and middle name with
        ///     spaces between the last, first, and middle names. Read-only.
        ///</summary>
        public override string CompanyLastFirstSpaceOnly { get { return Item.CompanyLastFirstSpaceOnly; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the company main telephone
        ///     number for the contact. Read/write.
        ///</summary>
        public override string CompanyMainTelephoneNumber { get { return Item.CompanyMainTelephoneNumber; } set { Item.CompanyMainTelephoneNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the company name for
        ///     the contact. Read/write.
        ///</summary>
        public override string CompanyName { get { return Item.CompanyName; } set { Item.CompanyName = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the name of the computer
        ///     network for the contact. Read/write.
        ///</summary>
        public override string ComputerNetworkName { get { return Item.ComputerNetworkName; } set { Item.ComputerNetworkName = value; } }
        
        ///<summary>
        ///     Return the Microsoft.Office.Interop.Outlook.Conflicts object that represents
        ///     the items that are in conflict for any Outlook item object. Read-only.
        ///</summary>
        public override Conflicts Conflicts { get { return Item.Conflicts; } }
        
        ///<summary>
        ///     Returns a String (string in C#) that uniquely identifies a Microsoft.Office.Interop.Outlook.Conversation
        ///     object that the Microsoft.Office.Interop.Outlook.ContactItem object belongs
        ///     to. Read-only.
        ///</summary>
        public override string ConversationID { get { return Item.ConversationID; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the index of the conversation
        ///     thread of the Outlook item. Read-only.
        ///</summary>
        public override string ConversationIndex { get { return Item.ConversationIndex; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the topic of the conversation
        ///     thread of the Outlook item. Read-only.
        ///</summary>
        public override string ConversationTopic { get { return Item.ConversationTopic; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the customer ID for
        ///     the contact. Read/write.
        ///</summary>
        public override string CustomerID { get { return Item.CustomerID; } set { Item.CustomerID = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the department name
        ///     for the contact. Read/write.
        ///</summary>
        public override string Department { get { return Item.Department; } set { Item.Department = value; } }
        
        ///<summary>
        ///     Returns a constant that belongs to the Microsoft.Office.Interop.Outlook.OlDownloadState
        ///     enumeration indicating the download state of the item. Read-only.
        ///</summary>
        public override OlDownloadState DownloadState { get { return Item.DownloadState; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the e-mail address of
        ///     the first e-mail entry for the contact. Read/write.
        ///</summary>
        public override string Email1Address { get { return Item.Email1Address; } set { Item.Email1Address = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the address type (such
        ///     as EX or SMTP) of the first e-mail entry for the contact. Read/write.
        ///</summary>
        public override string Email1AddressType { get { return Item.Email1AddressType; } set { Item.Email1AddressType = value; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the display name of the first
        ///     e-mail address for the contact. Read/write.
        ///</summary>
        public override string Email1DisplayName { get { return Item.Email1DisplayName; } set { Item.Email1DisplayName = value; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the Entry ID of the first e-mail
        ///     address for the contact. Read-only.
        ///</summary>
        public override string Email1EntryID { get { return Item.Email1EntryID; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the e-mail address of
        ///     the second e-mail entry for the contact. Read/write.
        ///</summary>
        public override string Email2Address { get { return Item.Email2Address; } set { Item.Email2Address = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the address type (such
        ///     as EX or SMTP) of the second e-mail entry for the contact. Read/write.
        ///</summary>
        public override string Email2AddressType { get { return Item.Email2AddressType; } set { Item.Email2AddressType = value; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the display name of the second
        ///     e-mail entry for the contact. Read/write.
        ///</summary>
        public override string Email2DisplayName { get { return Item.Email2DisplayName; } set { Item.Email2DisplayName = value; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the Entry ID of the second e-mail
        ///     entry for the contact. Read-only.
        ///</summary>
        public override string Email2EntryID { get { return Item.Email2EntryID; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the e-mail address of
        ///     the third e-mail entry for the contact. Read/write.
        ///</summary>
        public override string Email3Address { get { return Item.Email3Address; } set { Item.Email3Address = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the address type (such
        ///     as EX or SMTP) of the third e-mail entry for the contact. Read/write.
        ///</summary>
        public override string Email3AddressType { get { return Item.Email3AddressType; } set { Item.Email3AddressType = value; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the display name of the third
        ///     e-mail entry for the contact. Read/write.
        ///</summary>
        public override string Email3DisplayName { get { return Item.Email3DisplayName; } set { Item.Email3DisplayName = value; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the entry ID of the third e-mail
        ///     entry for the contact. Read-only.
        ///</summary>
        public override string Email3EntryID { get { return Item.Email3EntryID; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) indicating the default keyword string
        ///     assigned to the contact when it is filed. Read/write.
        ///</summary>
        public override string FileAs { get { return Item.FileAs; } set { Item.FileAs = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the first name for the
        ///     contact. Read/write.
        ///</summary>
        public override string FirstName { get { return Item.FirstName; } set { Item.FirstName = value; } }
        
        ///<summary>
        ///     Returns the Microsoft.Office.Interop.Outlook.FormDescription object that
        ///     represents the form description for the specified Outlook item. Read-only.
        ///</summary>
        public override FormDescription FormDescription { get { return Item.FormDescription; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the FTP site entry for
        ///     the contact. Read/write.
        ///</summary>
        public override string FTPSite { get { return Item.FTPSite; } set { Item.FTPSite = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) specifying the whole, unparsed full
        ///     name for the contact. Read/write.
        ///</summary>
        public override string FullName { get { return Item.FullName; } set { Item.FullName = value; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the full name and company of
        ///     the contact by concatenating the values of the Microsoft.Office.Interop.Outlook._ContactItem.FullName
        ///     and Microsoft.Office.Interop.Outlook._ContactItem.CompanyName properties.
        ///     Read-only.
        ///</summary>
        public override string FullNameAndCompany { get { return Item.FullNameAndCompany; } }
        
        ///<summary>
        ///     Returns or sets an Microsoft.Office.Interop.Outlook.OlGender constant indicating
        ///     the gender of the contact. Read/write.
        ///</summary>
        public override OlGender Gender { get { return Item.Gender; } set { Item.Gender = value; } }
        
        ///<summary>
        ///     Returns an Microsoft.Office.Interop.Outlook.Inspector object that represents
        ///     an inspector initialized to contain the specified item. Read-only.
        ///</summary>
        public override Inspector GetInspector { get { return Item.GetInspector; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the government ID number
        ///     for the contact. Read/write.
        ///</summary>
        public override string GovernmentIDNumber { get { return Item.GovernmentIDNumber; } set { Item.GovernmentIDNumber = value; } }
        
        ///<summary>
        ///     Returns a Boolean (bool in C#) value that is True if a Contacts item has
        ///     a picture associated with it. Read-only
        ///</summary>
        public override bool HasPicture { get { return Item.HasPicture; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the hobby for the contact.
        ///     Read/write.
        ///</summary>
        public override string Hobby { get { return Item.Hobby; } set { Item.Hobby = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the second home telephone
        ///     number for the contact. Read/write.
        ///</summary>
        public override string Home2TelephoneNumber { get { return Item.Home2TelephoneNumber; } set { Item.Home2TelephoneNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the full, unparsed text
        ///     of the home address for the contact. Read/write.
        ///</summary>
        public override string HomeAddress { get { return Item.HomeAddress; } set { Item.HomeAddress = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the city portion of
        ///     the home address for the contact. Read/write.
        ///</summary>
        public override string HomeAddressCity { get { return Item.HomeAddressCity; } set { Item.HomeAddressCity = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the country/region portion
        ///     of the home address for the contact. Read/write.
        ///</summary>
        public override string HomeAddressCountry { get { return Item.HomeAddressCountry; } set { Item.HomeAddressCountry = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the postal code portion
        ///     of the home address for the contact. Read/write.
        ///</summary>
        public override string HomeAddressPostalCode { get { return Item.HomeAddressPostalCode; } set { Item.HomeAddressPostalCode = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) the post office box number portion
        ///     of the home address for the contact. Read/write.
        ///</summary>
        public override string HomeAddressPostOfficeBox { get { return Item.HomeAddressPostOfficeBox; } set { Item.HomeAddressPostOfficeBox = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the state portion of
        ///     the home address for the contact. Read/write.
        ///</summary>
        public override string HomeAddressState { get { return Item.HomeAddressState; } set { Item.HomeAddressState = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the street portion of
        ///     the home address for the contact. Read/write.
        ///</summary>
        public override string HomeAddressStreet { get { return Item.HomeAddressStreet; } set { Item.HomeAddressStreet = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the home fax number
        ///     for the contact. Read/write.
        ///</summary>
        public override string HomeFaxNumber { get { return Item.HomeFaxNumber; } set { Item.HomeFaxNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the first home telephone
        ///     number for the contact. Read/write.
        ///</summary>
        public override string HomeTelephoneNumber { get { return Item.HomeTelephoneNumber; } set { Item.HomeTelephoneNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) that represents a contact's Microsoft
        ///     Instant Messenger address. Read/write.
        ///</summary>
        public override string IMAddress { get { return Item.IMAddress; } set { Item.IMAddress = value; } }
        
        ///<summary>
        ///     Returns or sets an Microsoft.Office.Interop.Outlook.OlImportance constant
        ///     indicating the relative importance level for the Outlook item. Read/write.
        ///</summary>
        public override OlImportance Importance { get { return Item.Importance; } set { Item.Importance = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the initials for the
        ///     contact. Read/write.
        ///</summary>
        public override string Initials { get { return Item.Initials; } set { Item.Initials = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) corresponding to the Address box
        ///     on the Details tab for a contact. Read/write.
        ///</summary>
        public override string InternetFreeBusyAddress { get { return Item.InternetFreeBusyAddress; } set { Item.InternetFreeBusyAddress = value; } }
        
        ///<summary>
        ///     Returns a Boolean (bool in C#) that determines if the item is in conflict.
        ///     Read-only.
        ///</summary>
        public override bool IsConflict { get { return Item.IsConflict; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the ISDN number for
        ///     the contact. Read/write.
        ///</summary>
        public override string ISDNNumber { get { return Item.ISDNNumber; } set { Item.ISDNNumber = value; } }
        
        ///<summary>
        ///     Returns a Boolean (bool in C#) value that indicates whether the Microsoft.Office.Interop.Outlook.ContactItem
        ///     is marked as a task. Read-only.
        ///</summary>
        public override bool IsMarkedAsTask { get { return Item.IsMarkedAsTask; } }
        
        ///<summary>
        ///     Returns an Microsoft.Office.Interop.Outlook.ItemProperties collection that
        ///     represents all standard and user-defined properties associated with the Outlook
        ///     item. Read-only.
        ///</summary>
        public override ItemProperties ItemProperties { get { return Item.ItemProperties; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the job title for the
        ///     contact. Read/write.
        ///</summary>
        public override string JobTitle { get { return Item.JobTitle; } set { Item.JobTitle = value; } }
        
        ///<summary>
        ///     Returns a Boolean (bool in C#) that indicates True if the transaction of
        ///     the contact will be journalized. Read/write.
        ///</summary>
        public override bool Journal { get { return Item.Journal; } set { Item.Journal = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) that represents the language in which
        ///     the contact writes messages. Read/write.
        ///</summary>
        public override string Language { get { return Item.Language; } set { Item.Language = value; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the last name, first name, middle
        ///     name, and suffix of the contact. Read-only.
        ///</summary>
        public override string LastFirstAndSuffix { get { return Item.LastFirstAndSuffix; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the concatenated last name,
        ///     first name, and middle name of the contact with no space between the last
        ///     name and the first name. Read-only.
        ///</summary>
        public override string LastFirstNoSpace { get { return Item.LastFirstNoSpace; } }
        
        ///<summary>
        ///     Returns a String (string in C#) that contains the last name, first name,
        ///     and suffix of the user without a space. Read-only
        ///</summary>
        public override string LastFirstNoSpaceAndSuffix { get { return Item.LastFirstNoSpaceAndSuffix; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the concatenated last name,
        ///     first name, and middle name of the contact with no space between the last
        ///     name and the first name. Read-only.
        ///</summary>
        public override string LastFirstNoSpaceCompany { get { return Item.LastFirstNoSpaceCompany; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the concatenated last name,
        ///     first name, and middle name of the contact with spaces between them. Read-only.
        ///</summary>
        public override string LastFirstSpaceOnly { get { return Item.LastFirstSpaceOnly; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the concatenated last name,
        ///     first name, and middle name of the contact with spaces between them. Read-only.
        ///</summary>
        public override string LastFirstSpaceOnlyCompany { get { return Item.LastFirstSpaceOnlyCompany; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the last name for the
        ///     contact. Read/write.
        ///</summary>
        public override string LastName { get { return Item.LastName; } set { Item.LastName = value; } }
        
        ///<summary>
        ///     Returns a String (string in C#) representing the concatenated last name and
        ///     first name for the contact. Read-only.
        ///</summary>
        public override string LastNameAndFirstName { get { return Item.LastNameAndFirstName; } }
        
        ///<summary>
        ///     Returns a Microsoft.Office.Interop.Outlook.Links collection that represents
        ///     the contacts to which the item is linked. Read-only.
        ///</summary>
        public override Links Links { get { return Item.Links; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the full, unparsed selected
        ///     mailing address for the contact. Read/write.
        ///</summary>
        public override string MailingAddress { get { return Item.MailingAddress; } set { Item.MailingAddress = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the city name portion
        ///     of the selected mailing address of the contact. Read/write.
        ///</summary>
        public override string MailingAddressCity { get { return Item.MailingAddressCity; } set { Item.MailingAddressCity = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the country/region code
        ///     portion of the selected mailing address of the contact. Read/write.
        ///</summary>
        public override string MailingAddressCountry { get { return Item.MailingAddressCountry; } set { Item.MailingAddressCountry = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the postal code (zip
        ///     code) portion of the selected mailing address of the contact. Read/write.
        ///</summary>
        public override string MailingAddressPostalCode { get { return Item.MailingAddressPostalCode; } set { Item.MailingAddressPostalCode = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the post office box
        ///     number portion of the selected mailing address of the contact. Read/write.
        ///</summary>
        public override string MailingAddressPostOfficeBox { get { return Item.MailingAddressPostOfficeBox; } set { Item.MailingAddressPostOfficeBox = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the state code portion
        ///     for the selected mailing address of the contact. Read/write.
        ///</summary>
        public override string MailingAddressState { get { return Item.MailingAddressState; } set { Item.MailingAddressState = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the street address portion
        ///     of the selected mailing address of the contact. Read/write.
        ///</summary>
        public override string MailingAddressStreet { get { return Item.MailingAddressStreet; } set { Item.MailingAddressStreet = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the manager name for
        ///     the contact. Read/write.
        ///</summary>
        public override string ManagerName { get { return Item.ManagerName; } set { Item.ManagerName = value; } }
        
        ///<summary>
        ///     This object, member, or enumeration is deprecated and is not intended to
        ///     be used in your code.
        ///</summary>
        public override dynamic MAPIOBJECT { get { return Item.MAPIOBJECT; } }
        
        ///<summary>
        ///     Returns or sets an Microsoft.Office.Interop.Outlook.OlRemoteStatus constant
        ///     that determines the status of an item once it is received by a remote user.
        ///     Read/write.
        ///</summary>
        public override OlRemoteStatus MarkForDownload { get { return Item.MarkForDownload; } set { Item.MarkForDownload = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the middle name for
        ///     the contact. Read/write.
        ///</summary>
        public override string MiddleName { get { return Item.MiddleName; } set { Item.MiddleName = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the mileage for an item.
        ///     Read/write.
        ///</summary>
        public override string Mileage { get { return Item.Mileage; } set { Item.Mileage = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the mobile telephone
        ///     number for the contact. Read/write.
        ///</summary>
        public override string MobileTelephoneNumber { get { return Item.MobileTelephoneNumber; } set { Item.MobileTelephoneNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) indicating the user's Microsoft NetMeeting
        ///     ID, or alias. Read/write.
        ///</summary>
        public override string NetMeetingAlias { get { return Item.NetMeetingAlias; } set { Item.NetMeetingAlias = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) specifying the name of the Microsoft
        ///     NetMeeting server being used for an online meeting. Read/write.
        ///</summary>
        public override string NetMeetingServer { get { return Item.NetMeetingServer; } set { Item.NetMeetingServer = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the nickname for the
        ///     contact. Read/write.
        ///</summary>
        public override string NickName { get { return Item.NickName; } set { Item.NickName = value; } }
        
        ///<summary>
        ///     Returns or sets a Boolean (bool in C#) value that is True to not age the
        ///     Outlook item. Read/write.
        ///</summary>
        public override bool NoAging { get { return Item.NoAging; } set { Item.NoAging = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) specifying the specific office location
        ///     (for example, Building 1 Room 1 or Suite 123) for the contact. Read/write.
        ///</summary>
        public override string OfficeLocation { get { return Item.OfficeLocation; } set { Item.OfficeLocation = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the organizational ID
        ///     number for the contact. Read/write.
        ///</summary>
        public override string OrganizationalIDNumber { get { return Item.OrganizationalIDNumber; } set { Item.OrganizationalIDNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the other address for
        ///     the contact. Read/write.
        ///</summary>
        public override string OtherAddress { get { return Item.OtherAddress; } set { Item.OtherAddress = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the city portion of
        ///     the other address for the contact. Read/write.
        ///</summary>
        public override string OtherAddressCity { get { return Item.OtherAddressCity; } set { Item.OtherAddressCity = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the country/region portion
        ///     of the other address for the contact. Read/write.
        ///</summary>
        public override string OtherAddressCountry { get { return Item.OtherAddressCountry; } set { Item.OtherAddressCountry = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the postal code portion
        ///     of the other address for the contact. Read/write.
        ///</summary>
        public override string OtherAddressPostalCode { get { return Item.OtherAddressPostalCode; } set { Item.OtherAddressPostalCode = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the post office box
        ///     portion of the other address for the contact. Read/write.
        ///</summary>
        public override string OtherAddressPostOfficeBox { get { return Item.OtherAddressPostOfficeBox; } set { Item.OtherAddressPostOfficeBox = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the state portion of
        ///     the other address for the contact. Read/write.
        ///</summary>
        public override string OtherAddressState { get { return Item.OtherAddressState; } set { Item.OtherAddressState = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the street portion of
        ///     the other address for the contact. Read/write.
        ///</summary>
        public override string OtherAddressStreet { get { return Item.OtherAddressStreet; } set { Item.OtherAddressStreet = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the other fax number
        ///     for the contact. Read/write.
        ///</summary>
        public override string OtherFaxNumber { get { return Item.OtherFaxNumber; } set { Item.OtherFaxNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the other telephone
        ///     number for the contact. Read/write.
        ///</summary>
        public override string OtherTelephoneNumber { get { return Item.OtherTelephoneNumber; } set { Item.OtherTelephoneNumber = value; } }
        
        ///<summary>
        ///     Returns an Integer (int in C#) value representing the build number of the
        ///     Outlook application for an Outlook item. Read-only.
        ///</summary>
        public override int OutlookInternalVersion { get { return Item.OutlookInternalVersion; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the pager number for
        ///     the contact. Read/write.
        ///</summary>
        public override string PagerNumber { get { return Item.PagerNumber; } set { Item.PagerNumber = value; } }
        
        ///<summary>
        ///     Returns the parent Object of the specified object. Read-only.
        ///</summary>
        public override dynamic Parent { get { return Item.Parent; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) representing the URL of the personal
        ///     Web page for the contact. Read/write.
        ///</summary>
        public override string PersonalHomePage { get { return Item.PersonalHomePage; } set { Item.PersonalHomePage = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) specifying the primary telephone
        ///     number for the contact. Read/write.
        ///</summary>
        public override string PrimaryTelephoneNumber { get { return Item.PrimaryTelephoneNumber; } set { Item.PrimaryTelephoneNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) indicating the profession for the
        ///     contact. Read/write.
        ///</summary>
        public override string Profession { get { return Item.Profession; } set { Item.Profession = value; } }
        
        ///<summary>
        ///     Returns a Microsoft.Office.Interop.Outlook.PropertyAccessor object that supports
        ///     creating, getting, setting, and deleting properties of the parent ContactItem
        ///     object. Read-only.
        ///</summary>
        public override PropertyAccessor PropertyAccessor { get { return Item.PropertyAccessor; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) indicating the radio telephone number
        ///     for the contact. Read/write.
        ///</summary>
        public override string RadioTelephoneNumber { get { return Item.RadioTelephoneNumber; } set { Item.RadioTelephoneNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) specifying the referral name entry
        ///     for the contact. Read/write.
        ///</summary>
        public override string ReferredBy { get { return Item.ReferredBy; } set { Item.ReferredBy = value; } }
        
        ///<summary>
        ///     Returns or sets a Boolean (bool in C#) value that is True if the reminder
        ///     overrides the default reminder behavior for the item. Read/write.
        ///</summary>
        public override bool ReminderOverrideDefault { get { return Item.ReminderOverrideDefault; } set { Item.ReminderOverrideDefault = value; } }
        
        ///<summary>
        ///     Returns or sets a Boolean (bool in C#) value that is True if the reminder
        ///     should play a sound when it occurs for this item. Read/write.
        ///</summary>
        public override bool ReminderPlaySound { get { return Item.ReminderPlaySound; } set { Item.ReminderPlaySound = value; } }
        
        ///<summary>
        ///     Returns or sets a Boolean (bool in C#) value that is True if a reminder has
        ///     been set for this item. Read/write.
        ///</summary>
        public override bool ReminderSet { get { return Item.ReminderSet; } set { Item.ReminderSet = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) indicating the path and file name
        ///     of the sound file to play when the reminder occurs for the Outlook item.
        ///     Read/write.
        ///</summary>
        public override string ReminderSoundFile { get { return Item.ReminderSoundFile; } set { Item.ReminderSoundFile = value; } }
        
        ///<summary>
        ///     Returns or sets a DateTime indicating the date and time at which the reminder
        ///     should occur for the specified item. Read/write.
        ///</summary>
        public override DateTime ReminderTime { get { return Item.ReminderTime; } set { Item.ReminderTime = value; } }
        
        ///<summary>
        ///     Returns or sets a byte array that represents the body of the Microsoft Outlook
        ///     item in Rich Text Format. Read/write.
        ///</summary>
        public override dynamic RTFBody { get { return Item.RTFBody; } set { Item.RTFBody = value; } }
        
        ///<summary>
        ///     Returns a Boolean (bool in C#) value that is True if the Outlook item has
        ///     not been modified since the last save. Read-only.
        ///</summary>
        public override bool Saved { get { return Item.Saved; } }
        
        ///<summary>
        ///     Returns or sets an Microsoft.Office.Interop.Outlook.OlMailingAddress constant
        ///     indicating the type of the mailing address for the contact. Read/write.
        ///</summary>
        public override OlMailingAddress SelectedMailingAddress { get { return Item.SelectedMailingAddress; } set { Item.SelectedMailingAddress = value; } }
        
        ///<summary>
        ///     Returns or sets a constant in the Microsoft.Office.Interop.Outlook.OlSensitivity
        ///     enumeration indicating the sensitivity for the Outlook item. Read/write.
        ///</summary>
        public override OlSensitivity Sensitivity { get { return Item.Sensitivity; } set { Item.Sensitivity = value; } }
        
        ///<summary>
        ///     Returns the Microsoft.Office.Interop.Outlook.NameSpace object for the current
        ///     session. Read-only.
        ///</summary>
        public override NameSpace Session { get { return Item.Session; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) indicating the spouse name entry
        ///     for the contact. Read/write.
        ///</summary>
        public override string Spouse { get { return Item.Spouse; } set { Item.Spouse = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) indicating the name suffix (such
        ///     as Jr., III, or Ph.D.) for the specified contact. Read/write.
        ///</summary>
        public override string Suffix { get { return Item.Suffix; } set { Item.Suffix = value; } }
        
        ///<summary>
        ///     Returns or sets a DateTime value that represents the completion date of the
        ///     task for this Microsoft.Office.Interop.Outlook.ContactItem. Read/write.
        ///</summary>
        public override DateTime TaskCompletedDate { get { return Item.TaskCompletedDate; } set { Item.TaskCompletedDate = value; } }
        
        ///<summary>
        ///     Returns or sets a DateTime value that represents the due date of the task
        ///     for this Microsoft.Office.Interop.Outlook.ContactItem. Read/write.
        ///</summary>
        public override DateTime TaskDueDate { get { return Item.TaskDueDate; } set { Item.TaskDueDate = value; } }
        
        ///<summary>
        ///     Returns or sets a DateTime value that represents the start date of the task
        ///     for this Microsoft.Office.Interop.Outlook.ContactItem object. Read/write.
        ///</summary>
        public override DateTime TaskStartDate { get { return Item.TaskStartDate; } set { Item.TaskStartDate = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) value that represents the subject
        ///     of the task for the Microsoft.Office.Interop.Outlook.ContactItem object.
        ///     Read/write.
        ///</summary>
        public override string TaskSubject { get { return Item.TaskSubject; } set { Item.TaskSubject = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) indicating the telex number for the
        ///     contact. Read/write.
        ///</summary>
        public override string TelexNumber { get { return Item.TelexNumber; } set { Item.TelexNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) indicating the title for the contact.
        ///     Read/write.
        ///</summary>
        public override string Title { get { return Item.Title; } set { Item.Title = value; } }
        
        ///<summary>
        ///     Returns or sets a DateTime value that represents the ordinal value of the
        ///     task for the Microsoft.Office.Interop.Outlook.ContactItem. Read/write.
        ///</summary>
        public override DateTime ToDoTaskOrdinal { get { return Item.ToDoTaskOrdinal; } set { Item.ToDoTaskOrdinal = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) specifying the TTY/TDD telephone
        ///     number for the contact. Read/write.
        ///</summary>
        public override string TTYTDDTelephoneNumber { get { return Item.TTYTDDTelephoneNumber; } set { Item.TTYTDDTelephoneNumber = value; } }
        
        ///<summary>
        ///     Returns or sets a Boolean (bool in C#) value that is True if the Outlook
        ///     item has not been opened (read). Read/write.
        ///</summary>
        public override bool UnRead { get { return Item.UnRead; } set { Item.UnRead = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) specifying the first field on the
        ///     Contacts form intended for miscellaneous use for the contact. Read/write.
        ///</summary>
        public override string User1 { get { return Item.User1; } set { Item.User1 = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) specifying the second field on the
        ///     Contacts form intended for miscellaneous use for the contact. Read/write.
        ///</summary>
        public override string User2 { get { return Item.User2; } set { Item.User2 = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) specifying the third field on the
        ///     Contacts form intended for miscellaneous use for the contact. Read/write.
        ///</summary>
        public override string User3 { get { return Item.User3; } set { Item.User3 = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) specifying the fourth field on the
        ///     Contacts form intended for miscellaneous use for the contact. Read/write.
        ///</summary>
        public override string User4 { get { return Item.User4; } set { Item.User4 = value; } }
        
        ///<summary>
        ///     This object, member, or enumeration is deprecated and is not intended to
        ///     be used in your code.
        ///</summary>
        public override string UserCertificate { get { return Item.UserCertificate; } set { Item.UserCertificate = value; } }
        
        ///<summary>
        ///     Returns the Microsoft.Office.Interop.Outlook.UserProperties collection that
        ///     represents all the user properties for the Outlook item. Read-only.
        ///</summary>
        public override UserProperties UserProperties { get { return Item.UserProperties; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) indicating the URL of the Web page
        ///     for the contact. Read/write.
        ///</summary>
        public override string WebPage { get { return Item.WebPage; } set { Item.WebPage = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) indicating the Japanese phonetic
        ///     rendering (yomigana) of the company name for the contact. Read/write.
        ///</summary>
        public override string YomiCompanyName { get { return Item.YomiCompanyName; } set { Item.YomiCompanyName = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) indicating the Japanese phonetic
        ///     rendering (yomigana) of the first name for the contact. Read/write.
        ///</summary>
        public override string YomiFirstName { get { return Item.YomiFirstName; } set { Item.YomiFirstName = value; } }
        
        ///<summary>
        ///     Returns or sets a String (string in C#) indicating the Japanese phonetic
        ///     rendering (yomigana) of the last name for the contact. Read/write.
        ///</summary>
        public override string YomiLastName { get { return Item.YomiLastName; } set { Item.YomiLastName = value; } }

        ///<summary>
        ///     Adds a logo picture to the current Electronic Business Card of the contact
        ///     item.
        /// Parameters:
        ///   Path:
        ///     The full path name that specifies the picture file to load.
        ///</summary>
        public override void AddBusinessCardLogoPicture(string Path) { Item.AddBusinessCardLogoPicture(Path); }
        
        ///<summary>
        ///     Adds a picture to a contact item.
        /// Parameters:
        ///   Path:
        ///     A string containing the complete path and filename of the picture to be added
        ///     to the contact item.
        ///</summary>
        public override void AddPicture(string Path) { Item.AddPicture(Path); }
        
        ///<summary>
        ///     Clears the Microsoft.Office.Interop.Outlook.ContactItem object as a task.
        ///</summary>
        public override void ClearTaskFlag() { Item.ClearTaskFlag(); }
        
        ///<summary>
        ///     Closes and optionally saves changes to the Outlook item.
        /// Parameters:
        ///   SaveMode:
        ///     The close behavior. If the item displayed within the inspector has not been
        ///     changed, this argument has no effect.
        ///</summary>
        public override void Close(OlInspectorClose SaveMode) { Item.Close(SaveMode); }
        
        ///<summary>
        ///     Creates another instance of an object.
        /// Returns:
        ///     Returns an System.Object that is a copy of the parent contact item..
        ///</summary>
        public override dynamic Copy() { return Item.Copy(); }
        
        ///<summary>
        ///     Deletes an object from the collection.
        ///</summary>
        public override void Delete() { Item.Delete(); }
        
        ///<summary>
        ///     Displays a new Microsoft.Office.Interop.Outlook.Inspector object for the
        ///     item.
        /// Parameters:
        ///   Modal:
        ///     True to make the window modal. The default value is False.
        ///</summary>
        public override void Display(object Modal = null) { Item.Display(Modal); }
        
        ///<summary>
        ///     Creates a new Microsoft.Office.Interop.Outlook.MailItem object containing
        ///     contact information and, optionally, an Electronic Business Card (EBC) image
        ///     based on the specified Microsoft.Office.Interop.Outlook.ContactItem object.
        /// Returns:
        ///     A MailItem object that represents the new e-mail item containing the business
        ///     card information.
        ///</summary>
        public override MailItem ForwardAsBusinessCard() { return Item.ForwardAsBusinessCard(); }
        
        ///<summary>
        ///     Creates a Microsoft.Office.Interop.Outlook.MailItem and attaches the contact
        ///     information in vCard format.
        /// Returns:
        ///     A MailItem object that represents the new mail item to which the contact
        ///     information is attached.
        ///</summary>
        public override MailItem ForwardAsVcard() { return Item.ForwardAsVcard(); }
        
        ///<summary>
        ///     Obtains a Microsoft.Office.Interop.Outlook.Conversation object that represents
        ///     the conversation to which this item belongs.
        /// Returns:
        ///     Returns a Microsoft.Office.Interop.Outlook.Conversation object that represents
        ///     the conversation to which this item belongs.
        ///</summary>
        public override Conversation GetConversation() { return Item.GetConversation(); }
        
        ///<summary>
        ///     Marks a Microsoft.Office.Interop.Outlook.ContactItem object as a task and
        ///     assigns a task interval for the object.
        /// Parameters:
        ///   MarkInterval:
        ///     The task interval for the ContactItem.
        ///</summary>
        public override void MarkAsTask(OlMarkInterval MarkInterval) { Item.MarkAsTask(MarkInterval); }
        
        ///<summary>
        ///     Moves a Microsoft Outlook item to a new folder.
        /// Parameters:
        ///   DestFldr:
        ///     An expression that returns a Folder object. The destination folder.
        /// Returns:
        ///     An Object value that represents the item which has been moved to the designated
        ///     folder.
        ///</summary>
        public override dynamic Move(MAPIFolder DestFldr) { return Item.Move(DestFldr); }
        
        ///<summary>
        ///     Prints the Outlook item using all default settings. The PrintOut method is
        ///     the only Outlook method that can be used for printing.
        ///</summary>
        public override void PrintOut() { Item.PrintOut(); }
        
        ///<summary>
        ///     Removes a picture from a Contacts item.
        ///</summary>
        public override void RemovePicture() { Item.RemovePicture(); }
        
        ///<summary>
        ///     Resets the Electronic Business Card on the contact item to the default business
        ///     card, deleting any custom layout and logo on the Electronic Business Card.
        ///</summary>
        public override void ResetBusinessCard() { Item.ResetBusinessCard(); }
        
        ///<summary>
        ///     Saves the Microsoft Outlook item to the current folder or, if this is a new
        ///     item, to the Outlook default folder for the item type.
        ///</summary>
        public override void Save() { Item.Save(); }
        
        ///<summary>
        ///     Saves the Microsoft Outlook item to the specified path and in the format
        ///     of the specified file type. If the file type is not specified, the MSG format
        ///     (.msg) is used.
        /// Parameters:
        ///   Path:
        ///     The path in which to save the item.
        ///   Type:
        ///     The file type to save. Can be one of the following OlSaveAsType constants:
        ///     olHTML, olMSG, olRTF, olTemplate, olDoc,olTXT, olVCal, olVCard, olICal, or
        ///     olMSGUnicode.
        ///</summary>
        public override void SaveAs(string Path, object Type = null) { Item.SaveAs(Path, Type); }
        
        ///<summary>
        ///     Saves an image of the business card generated from the specified Microsoft.Office.Interop.Outlook.ContactItem
        ///     object.
        /// Parameters:
        ///   Path:
        ///     The fully qualified path and file name of the image to be saved.
        ///</summary>
        public override void SaveBusinessCardImage(string Path) { Item.SaveBusinessCardImage(Path); }
        
        ///<summary>
        ///     Displays the electronic business card (EBC) editor dialog box for the Microsoft.Office.Interop.Outlook.ContactItem
        ///     object.
        ///</summary>
        public override void ShowBusinessCardEditor() { Item.ShowBusinessCardEditor(); }
        
        ///<summary>
        ///     Displays the Show Categories dialog box, which allows you to select categories
        ///     that correspond to the subject of the item.
        ///</summary>
        public override void ShowCategoriesDialog() { Item.ShowCategoriesDialog(); }
        
        ///<summary>
        ///     Displays the Check Phone Number dialog box for a specified telephone number
        ///     contained by a Microsoft.Office.Interop.Outlook.ContactItem object.
        /// Parameters:
        ///   PhoneNumber:
        ///     The type of telephone number to be checked.
        ///</summary>
        public override void ShowCheckPhoneDialog(OlContactPhoneNumber PhoneNumber) { Item.ShowCheckPhoneDialog(PhoneNumber); }

        #endregion

        /// <summary>
        /// Disposes the Outlook Contact item object
        /// </summary>
        /// <param name="disposing"></param>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                // Dispose managed resources
            }

            UnRegisterEvents();

            // Dispose unmanaged resources
            base.Dispose(disposing);

            Marshal.ReleaseComObject(Item);
            Item = null;
        }

        #region events
        public override event ItemEvents_10_AfterWriteEventHandler AfterWrite;
        public override event ItemEvents_10_AttachmentAddEventHandler AttachmentAdd;
        public override event ItemEvents_10_AttachmentReadEventHandler AttachmentRead;
        public override event ItemEvents_10_AttachmentRemoveEventHandler AttachmentRemove;
        public override event ItemEvents_10_BeforeAttachmentAddEventHandler BeforeAttachmentAdd;
        public override event ItemEvents_10_BeforeAttachmentPreviewEventHandler BeforeAttachmentPreview;
        public override event ItemEvents_10_BeforeAttachmentReadEventHandler BeforeAttachmentRead;
        public override event ItemEvents_10_BeforeAttachmentSaveEventHandler BeforeAttachmentSave;
        public override event ItemEvents_10_BeforeAttachmentWriteToTempFileEventHandler BeforeAttachmentWriteToTempFile;
        public override event ItemEvents_10_BeforeAutoSaveEventHandler BeforeAutoSave;
        public override event ItemEvents_10_BeforeCheckNamesEventHandler BeforeCheckNames;
        public override event ItemEvents_10_BeforeDeleteEventHandler BeforeDelete;
        public override event ItemEvents_10_BeforeReadEventHandler BeforeRead;
        public override event ItemEvents_10_CustomActionEventHandler CustomAction;
        public override event ItemEvents_10_ForwardEventHandler ForwardItem;
        public override event ItemEvents_10_CustomPropertyChangeEventHandler CustomPropertyChange;
        public override event ItemEvents_10_OpenEventHandler Open;
        public override event ItemEvents_10_PropertyChangeEventHandler PropertyChange;
        public override event ItemEvents_10_ReadEventHandler Read;
        public override event ItemEvents_10_ReplyAllEventHandler ReplyAllItem;
        public override event ItemEvents_10_ReplyEventHandler ReplyItem;
        public override event ItemEvents_10_UnloadEventHandler Unload;
        public override event ItemEvents_10_WriteEventHandler Write;
        #endregion
    }
}
